package com.webService;

import com.sun.net.httpserver.Headers; // HTTP请求和响应头是由这个类实现了接口的代表地图<字符串，列表<字符串>>.
import com.sun.net.httpserver.HttpExchange; // 这个类封装了一个HTTP请求的接收，是在一个交易所产生的响应。https为HttpsExchange
import com.sun.net.httpserver.HttpHandler; // 一个处理程序，来处理HTTP交流。
import com.sun.net.httpserver.HttpServer; // 这个类实现了一个简单的HTTP服务器。https为HttpsServer

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executors;

/** jdk自带的httpServer类
 * Created by IntelliJ IDEA.
 * User: zzx
 * Date: 2017/11/12
 * Time: 上午10:41
 */

/**
 * 声明http服务
 */
public class HttpServerDemo {
    public static void main(String[] args) throws IOException {
        InetSocketAddress addr = new InetSocketAddress(8080);
        HttpServer server = HttpServer.create(addr, 0); // 声明服务，参数2为最大连接数量

        server.createContext("/", new MyHandler());
        server.setExecutor(Executors.newCachedThreadPool());
        server.start();
        System.out.println("Server is listening on port 8080");
    }
}

/**
 * 实例化处理接口
 */
class MyHandler implements HttpHandler {

    public void handle(HttpExchange exchange) throws IOException { // throws为异常声明

        //返回一个可变的对象到HTTP响应头可以存储并将其作为该反应的一部分发送。
        Headers responseHeaders = exchange.getResponseHeaders();

        // 设置返回内容格式
        responseHeaders.set("Content-Type", "text/plain; charset=utf-8"); // 参数2可设为text/html

        //设置响应头，必须在getResponseHeaders之后
        exchange.sendResponseHeaders(200, 0); // 参数1为响应码，参数2为返回的长度，超过会被客户端截断。

        OutputStream responseBody = exchange.getResponseBody(); // 返回一个流，响应体必须写
        Headers requestHeaders = exchange.getRequestHeaders(); // 返回包含此请求的HTTP头的不可变对象。

        String requestMethod = exchange.getRequestMethod(); // 获取请求方法
        if (requestMethod.equalsIgnoreCase("GET")) { // 判断请求方法

            System.out.println("请求方法" + requestMethod + "\n");
        }

        // 处理请求内容
        responseBody.write("请求内容：\n".getBytes());
        Set<String> keySet = requestHeaders.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            List values = requestHeaders.get(key);
            String s = key + " = " + values.toString() + "\n";
            responseBody.write(s.getBytes()); // 输出请求的内容，注意要转换：getBytes
        }

        // 输出内容，注意要转换：getBytes
        responseBody.write("jdk自带轻量级http server例子\n".getBytes());
        responseBody.close(); // 关闭连接

    }
}

